
# coding: utf-8

# In[1]:

import os
os.chdir('D:/PatentData/2016/rawdata')
os.getcwd()
import codecs

# In[2]:

from xml.dom.minidom import parse, parseString
import re

def process_single_xml_file(filename, writeon):
    xml_file = codecs.open(filename, 'r', 'iso-8859-1').read()
    xml_list = re.split('<\?xml.*?\?>', xml_file)    # 한 xml_file을 특허별로 나누어줌
    
    index = 1

    for one_xml in xml_list:

        if index > 1:

            dom = parseString(one_xml)
            publ = dom.getElementsByTagName("publication-reference")[0]
            pid = publ.getElementsByTagName("doc-number")[0].firstChild.nodeValue
            isd = publ.getElementsByTagName("date")[0].firstChild.nodeValue
            
            if len(dom.getElementsByTagName("application-reference")) > 0:
                appl = dom.getElementsByTagName("application-reference")[0]
                apd = appl.getElementsByTagName("date")[0].firstChild.nodeValue
            else: continue
            
            assi = ''
            if len(dom.getElementsByTagName("assignees")) > 0:
                assig = dom.getElementsByTagName("assignees")[0]
                
                if len(assig.getElementsByTagName("first-name")) > 0 and len(assig.getElementsByTagName("last-name")) > 0:
                    first = assig.getElementsByTagName("first-name")[0].firstChild.nodeValue
                    last = assig.getElementsByTagName("last-name")[0].firstChild.nodeValue
                    assi = first + ' ' + last
                
                elif len(assig.getElementsByTagName("first-name")) > 0:
                    assi = assig.getElementsByTagName("first-name")[0].firstChild.nodeValue
                    
                elif len(assig.getElementsByTagName("last-name")) > 0:
                    assi = assig.getElementsByTagName("last-name")[0].firstChild.nodeValue
                
                else:
                    assi = assig.getElementsByTagName("orgname")[0].firstChild.nodeValue
            
            writeon.write(pid + '*' + isd + '*' + apd + '*' + assi + '\n')
            
            # print(pid)    # 문제가 발생한 특허를 확인하려면 이 기능을 키고 돌릴 것
        index += 1


# In[3]:

import sys

def select_files_in_folder(dir, ext):
    for file in os.listdir(dir):    # 'dir'에 있는 모든 파일들 이름으로 list를 만듦
        if file.endswith('.%s' % ext):    # 확장자가 .ext인 파일일 경우 True
            yield os.path.join(dir, file)    # 'dir/file' 형태의 새로운 dir를 뱉어냄
            
# 'dir' 안에 확장자가 '.ext'인 모든 file들로 이루어진 generator(한번 iterate 시키고 나면 사라지는 list)를 만드는 함수


# In[ ]:

file = codecs.open("basic_2016.csv", 'w', 'utf8')
file.write("WKU*ISD*APD*NAM_ASSG\n")

for xmlfile in select_files_in_folder('D:/PatentData/2016/rawdata', 'xml'):
    print("PROCESSING...", xmlfile)
    process_single_xml_file(xmlfile, file)

print("DONE")


# In[ ]:



